home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / FORMLESS_P3544711152001.psc / Formless Icon RESOURCE Creator / Cls / clsFileAPI.cls next >
Encoding:
Visual Basic class definition  |  2001-11-14  |  5.5 KB  |  195 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "clsFileAPI"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
  17. Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long
  18. Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Long) As Long
  19. Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
  20. Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
  21. Private Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As Long) As Long
  22. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  23.  
  24. Public Enum eFileAccess
  25.     eFileRead = &H80000000
  26.     eFileWrite = &H40000000
  27. End Enum
  28.  
  29. Public Enum eFileCommand
  30.     eFileCreate = 1
  31.     eFileCreatePlus = 2
  32.     eFileOpen = 3
  33.     eFileOpenPlus = 4
  34.     eFileTruncate = 5
  35. End Enum
  36.  
  37. Public Enum eFilePos
  38.     eFileBegin = 0
  39.     eFileCurrent = 1
  40.     eFileEnd = 2
  41. End Enum
  42.  
  43. Private Const FILE_ATTRIBUTE_NORMAL = &H80
  44. Private Const FILE_FLAG_SEQUENTIAL_SCAN = &H8000000
  45. Private Const FILE_SHARE_READ = &H1
  46. Private Const FILE_SHARE_WRITE = &H2
  47.  
  48. Dim hFile As Long
  49. Dim sFileName As String
  50.  
  51. Public Function OpenAPI(sFile As String, Optional ByVal eAccess As eFileAccess = eFileRead + eFileWrite, _
  52.     Optional ByVal eCommand As eFileCommand = eFileOpenPlus) As Long
  53. sFileName = sFile
  54. hFile = CreateFile(sFile & vbNullChar, eAccess, FILE_SHARE_READ, 0, eCommand, FILE_ATTRIBUTE_NORMAL + FILE_FLAG_SEQUENTIAL_SCAN, 0)
  55. OpenAPI = hFile
  56. End Function
  57.  
  58. Public Sub CloseAPI()
  59. If hFile <> 0 Then
  60.     CloseHandle hFile
  61. End If
  62. End Sub
  63.  
  64. Public Function ReadAPI(Text As String, Optional ByVal lReadLength As Long = 0) As Long
  65. Dim lActualLength As Long, Ret As Long
  66. Dim byteData() As Byte
  67.  
  68. ReadAPI = 0
  69. If hFile = 0 Then Exit Function
  70.  
  71. If lReadLength = 0 Then
  72.     lReadLength = FileSize
  73.     FilePos = 0
  74. End If
  75. If FilePos + lReadLength > FileSize Then
  76.     lReadLength = FileSize - FilePos
  77. End If
  78.  
  79. ReDim byteData(lReadLength)
  80.  
  81. Ret = ReadFile(hFile, byteData(0), lReadLength, lActualLength, 0)
  82.  
  83. If Ret = 0 Then Exit Function
  84.  
  85. If lActualLength <> 0 Then
  86.     Text = Space(lActualLength)
  87.     Text = StrConv(byteData, vbUnicode)
  88.     Text = left(Text, lActualLength)
  89. Else
  90.     Text = ""
  91. End If
  92. ReadAPI = lActualLength
  93. End Function
  94.  
  95. Public Function WriteAPI(Text As String) As Long
  96. Dim TextLength As Long, WriteLength As Long, Ret As Long, i As Long
  97. Dim byteData() As Byte
  98.  
  99. WriteAPI = 0
  100. If hFile = 0 Then Exit Function
  101.  
  102. TextLength = Len(Text)
  103. ReDim byteData(TextLength)
  104. byteData() = StrConv(Text & vbNullString, vbFromUnicode)
  105.  
  106. Ret = WriteFile(hFile, byteData(0), TextLength, WriteLength, ByVal 0)
  107.  
  108. If Ret = 0 Then Exit Function
  109. WriteAPI = WriteLength
  110. End Function
  111.  
  112. Public Function AppendAPI(Text As String, Optional ByVal ePosition As eFilePos = eFileEnd) As Long
  113. Dim sData As String, lPos As Long, lSize As Long
  114.  
  115. AppendAPI = 0
  116. If hFile = 0 Then Exit Function
  117.  
  118. If ePosition = eFileEnd Then
  119.     FilePosEx(eFileEnd) = 0
  120.     AppendAPI = WriteAPI(Text)
  121. Else
  122.     If ePosition = eFileBegin Then
  123.         FilePos = 0
  124.         lPos = 0
  125.     Else
  126.         lPos = FilePos
  127.     End If
  128.     lSize = FileSize
  129.     If lPos = lSize Then
  130.         AppendAPI = WriteAPI(Text)
  131.         Exit Function
  132.     End If
  133.     ReadAPI sData, lSize - lPos
  134.     sData = Text & sData
  135.     FilePos = lPos
  136.     AppendAPI = WriteAPI(sData)
  137. End If
  138. End Function
  139.  
  140. Public Property Get FileSize() As Long
  141. If hFile <> 0 Then
  142.     FileSize = GetFileSize(hFile, ByVal 0)
  143. Else
  144.     FileSize = 0
  145. End If
  146. End Property
  147.  
  148. Public Property Let FileSize(ByVal vNewValue As Long)
  149. If hFile <> 0 Then
  150.     SetFilePointer hFile, vNewValue, 0, eFileBegin
  151.     SetEndOfFile hFile
  152. End If
  153. End Property
  154.  
  155. Public Property Get FilePos() As Long
  156. If hFile <> 0 Then
  157.     FilePos = SetFilePointer(hFile, 0, 0, eFileCurrent)
  158. Else
  159.     FilePos = 0
  160. End If
  161. End Property
  162.  
  163. Public Property Let FilePos(ByVal vNewValue As Long)
  164. If hFile <> 0 Then
  165.     If vNewValue > FileSize Then vNewValue = FileSize
  166.     SetFilePointer hFile, vNewValue, 0, eFileBegin
  167. End If
  168. End Property
  169.  
  170. Public Property Let FilePosEx(ByVal ePosition As eFilePos, ByVal vNewValue As Long)
  171. If hFile <> 0 Then
  172.     SetFilePointer hFile, vNewValue, 0, ePosition
  173. End If
  174. End Property
  175.  
  176. Public Property Get FileHandle() As Long
  177. FileHandle = hFile
  178. End Property
  179.  
  180. Private Property Let FileHandle(ByVal vNewValue As Long)
  181. hFile = vNewValue
  182. End Property
  183.  
  184. Public Property Get FileName() As String
  185. FileName = sFileName
  186. End Property
  187.  
  188. Private Property Let FileName(ByVal vNewValue As String)
  189. sFileName = vNewValue
  190. End Property
  191.  
  192. Private Sub Class_Terminate()
  193. If hFile <> 0 Then CloseAPI
  194. End Sub
  195.